package ec.edu.ups.cidi.siia.plamdep.cargadocumentos;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.*;
import ec.edu.ups.cidi.siia.plamdep.interfaces.ILectorArchivos;
import ec.edu.ups.cidi.siia.plamdep.utils.Log;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LectorPDF implements ILectorArchivos
{
    private String texto="";

    public LectorPDF(String ruta)
    {
           leerArchivo( ruta);
    }
    
    public void leerArchivo(String pdf) {
        try{
        PdfReader reader = new PdfReader(pdf);
        PdfReaderContentParser parser = new PdfReaderContentParser(reader);
        SimpleTextExtractionStrategy render;
        for (int i = 1; i <= reader.getNumberOfPages(); i++) 
        {
        	render=new  SimpleTextExtractionStrategy();
        	texto = texto+parser.processContent(i,render).getResultantText();
        }
        
        texto=validarTexto(texto);
        
        reader.close();
        reader.eliminateSharedStreams();
        reader=null;
        parser=null;
        render=null;
        }catch(Exception ex){   
        
        Log.log(ex,Log.MOD_CARGA_DOCUMENTOS,Log.LEVEL_WARNING, LectorPDF.class,"Error al leerArchivo:"); 
        }
     }
 
    public String validarTexto(String texto)
    {
    
        String sep= "\\^\\^\\^\\^";
        String reg_sep="("+sep+")";
        String reg_detectar="((\\.)(\\s)*("+reg_sep+"))";
        String reg_excluir="(\\s)*(("+sep+"))([A-Z])";
        
           
            texto=texto.replaceAll("\n",sep);
        
            texto=texto.replaceAll("\\s*"+sep+"\\s*"+sep+"\\s*","\n");
        
            //valida si hay un punto y luego un enter 
            texto=texto.replaceAll(reg_detectar, "\\.\n");
          
            
            {//Vaida si termina con coma o punto y coma y se da un enter 
            String separador2="(,|;)";    
            Pattern p=Pattern.compile(separador2+reg_excluir);
            Matcher m=p.matcher(texto);
            while(m.find())
            {
                String t2="";
                try{ t2=texto.substring(m.end()-1,texto.length());     }
                catch(Exception e){ t2=texto.substring(m.end(),texto.length());}
                texto=texto.substring(0,m.start())+" "+t2;
                m=p.matcher(texto);
            }
            }
            //valida si hay un enter y la siguiente empieza con mayuscula
            Pattern p=Pattern.compile(reg_excluir);
            Matcher m=p.matcher(texto);
            while(m.find())
            {
                String t2="";
                try{ t2=texto.substring(m.end()-1,texto.length());     }
                catch(Exception e){ t2=texto.substring(m.end(),texto.length());}
                texto=texto.substring(0,m.start())+"\n"+t2;
                m=p.matcher(texto);
            }
        texto=texto.replaceAll(sep, "");
        return texto;
    
    }
    
    

   
    
    public String getContenido() 
    {
    
       return texto;
    }

    
    public String getTipo() 
    {
        return "PDF";
    }
    
}